var basicConfig = function() {
	return {
		/**
		 * 标准检验项数据处理
		 * @param {Object} data 接口数据
		 * @param {String} keyName 主键id
		 * @return {Object} 返回子表子子表数据  
		 */
		initConfig: function({
			ds1,
			ds2,
			ds3,
			ds4
		}, keyName, childKeyName) {
			const inspections = [];
			const FQCDetail = [];
			/* 处理数据格式
			 inspections {
			     name: '样品1',
			     result: 1,
			     FQCItems: [{
			         FQCItemID: 3,
			         value: '3.01',
			         result: 1
			     }]
			 }
			*/

			/* 配置
			 *  ins						属性容器（无关紧要）
			 *  	  |——name      			样品名称
			 *  	  |——result    			是否合格 1 - 合格 ， 2 - 不合格
			 *  	  |——insID     			检验样品id
			 *  	  |——FQCItems  			实测值数组
			 *  			|—— insDeID 	自身id
			 *   		|—— FQCItemID 	对应分类的ID
			 *   		|—— value		实测值
			 *   		|—— result		实测值结果是否合格 1 - 合格 ， 2 - 不合格
			 */

			// (data + '') 加 ''，为了防止 data 为 null、undefined、NaN等 使代码报错

			ds1.forEach(item => {
				const ins = {
					name: item.YPMC,
					result: item.FResult === '1' || item.FResult === 1 ? 1 : 2,
					FRemarks: item.FRemarks || '',
					insID: item[keyName],
					FQCItems: []
				};

				const ds2Children = ds2.filter(child => child[keyName] === ins.insID);
				// console.log(JSON.stringify(ds2Children));
				ds2Children.forEach(child => {
					ins.FQCItems.push({
						insDeID: child[childKeyName],
						FQCItemID: child.FQCItemID,
						value: `${child.JYJG1}`,
						result: child.FResult === '1' || child.FResult === 1 ? 1 : 2,
						Benchmark: child.Benchmark || '',
						IsLaboratory: child.IsLaboratory || false
					});
				});

				inspections.push(ins);
			});


			// 属性数组,将 分类表 与 子子表的检验项目,进行合并
			/* 配置
			 * ItemID 		分类ID
			 * ItemName		分类名称
			 * UpID			父级ID
			 * Benchmark	检验工具或方式
			 * Type			0-首级， 1-有上下限， 2-有检验标准
			 * minNum		下限值
			 * maxNum		上限值
			 * JYBZ			检验标准
			 */
			ds3.forEach(item => {
				FQCDetail.push({
					ItemID: item.InspectionTypeID,
					ItemName: item.InspectionTypeName,
					UpID: item.UpID,
					Type: 0
				});
			});

			ds4.forEach(item => {
				const obj = {
					ItemID: item.FQCItemID,
					ItemName: item.FQCItemName,
					UpID: item.UpID,
					Benchmark: item.Benchmark
				};

				if (item.PoorWork && item.PoorNormally) {
					obj.minNum = item.PoorNormally;
					obj.maxNum = item.PoorWork;
					obj.Type = 1;
				} else {
					obj.JYBZ = item.JYBZ;
					obj.Type = 2;
				}

				FQCDetail.push(obj);
			});

			return {
				inspections,
				FQCDetail
			};
		},
		/**
		 * 获取报告数据
		 */
		GetPopupInfoByDevice(str) { // 测试获取设备报告
			vm.tableData_Report = [];
			if (str == "光谱仪") {

				APP.jqueryAjax("getReportDataByID", {
					TourInspectionDeDeID: ""
				}, function(ret) {
					console.log(JSON.stringify(vm.tableData_Report));
					if (ret.status == 200) {
						let data = JSON.parse(ret.data.ds[0]["testReportData"]);

						vm.tableData_Report = data;

						vm.tableData_Report_radio = 0;
						let ReportData = data[vm.tableData_Report_radio];
						Object.assign(vm.popup_ReportData, ReportData);

						// 每次打开列表，重置预览窗口的检验结果值
						vm.rowDeviceForm.result = 1;
						// 打开报告列表弹层
						vm.showTableData_Report_popup = true;
					}
				}, function(err) {

				})

			} else if (str == "三坐标") {
				APP.jqueryAjax('getReportDataByID_1', {
					TourInspectionDeDeID: '',
				}, function(ret) {
					if (ret.status == 200) {

						let data = JSON.parse(ret.data.ds[0]["testReportValue"]);
						vm.tableData_Report = data;

						vm.tableData_Report_radio = 0;
						let ReportData = data[vm.tableData_Report_radio];
						Object.assign(vm.popup_ReportData, ReportData);

						// 每次打开列表，重置预览窗口的检验结果值
						vm.rowDeviceForm.result = 1;
						// 打开报告列表弹层
						vm.showTableData_Report_popup = true;
					}
				})

			} else if (str == "影像测量仪") {
				let data = [{
					index: 0
				}];
				vm.tableData_Report = data;

				vm.tableData_Report_radio = 0;
				let ReportData = data[vm.tableData_Report_radio];
				Object.assign(vm.popup_ReportData, ReportData);

				// 每次打开列表，重置预览窗口的检验结果值
				vm.rowDeviceForm.result = 1;
				// 打开报告列表弹层
				vm.showTableData_Report_popup = true;
			}

		},
		/**
		 * 查看当前报告弹层
		 */
		ViewPopupInfoByDevice(str, data) {
			console.log(str);
			if (str == "光谱仪") {

				// 模拟数据
				if (!data) {
					data =
						"{\"C≤0.08\":\"0.05\", \"Si≤1.0\":\"0.33\",\"Mn≤2.0\":\"0.7\",\"S≤0.03\":\"0.004\", \"P≤0.045\":\"0.031\", \"Cr 18.0-20.0\":\"18.35\", \"Ni 8.0-12.0\":\"8.08\", \"Ti\":\"\"}"
				}


				let ReportData = JSON.parse(data);
				Object.assign(vm.popup_ReportData, ReportData);
				vm.showRowInfoByDevice = true;

			} else if (str == "三坐标") {
				// 三坐标报告，打开 luckysheet 表格展示

				vm.showRowInfoByDevice = true;

				setTimeout(() => {

					let heightBox = $(".reportBox").outerHeight() - $(".popup_nav").outerHeight() - $(
						".popup_result").outerHeight() - $(".btnBox").outerHeight() - 20;

					vm.report_frame_height = heightBox;
					vm.openPopupIframe = true;
					// $(".report_iframe").css({
					// 	"height": heightBox + "px"
					// })
				}, 50)

			} else if (str == "影像测量仪") {

				vm.showRowInfoByDevice = true;

				setTimeout(() => {

					let heightBox = $(".reportBox").outerHeight() - $(".popup_nav").outerHeight() - $(
						".popup_result").outerHeight() - $(".btnBox").outerHeight() - 20;

					vm.report_frame_height = heightBox;
					vm.openPopupIframe = true;
				}, 50)

			}


		},
		/**
		 * 确认报告按钮
		 */
		SubmitPopupInfoByDevice(str) {

			if (str == "光谱仪") {
				// 报告类型实测值通过 ok、ng 区分是否合格

				let text = vm.rowDeviceForm.result == 1 ? "ok" : "ng";
				vm.setRange(text);
				// 关闭列表弹层
				vm.showTableData_Report_popup = false;

				// 关闭详情弹层
				vm.showRowInfoByDevice = false;
			} else if (str == "三坐标") {
				// 报告类型实测值通过 ok、ng 区分是否合格

				let text = vm.rowDeviceForm.result == 1 ? "ok" : "ng";
				vm.setRange(text);
				// 关闭列表弹层
				vm.showTableData_Report_popup = false;

				// 关闭详情弹层
				vm.showRowInfoByDevice = false;
			} else if (str == "影像测量仪") {
				// 报告类型实测值通过 ok、ng 区分是否合格

				let text = vm.rowDeviceForm.result == 1 ? "ok" : "ng";
				vm.setRange(text);
				// 关闭列表弹层
				vm.showTableData_Report_popup = false;

				// 关闭详情弹层
				vm.showRowInfoByDevice = false;
			}

		},
		submitKeyword() { // 点击输入框右侧确认按钮
			vm.InputFocus = 'none';
			console.log(9999);
			const NewData = [
				[{
					"m": vm.NumberMapBack($('#autoInput').val()), // 显示值
					"v": vm.NumberMapBack($('#autoInput').val()), // 原始值
					"ht": 0, // 水平对齐 0 居中、1 左、2右	
					"vt": 0, // 垂直对齐 0 中间、1 上、2下
					"tb": 2, // 文本换行 0 截断、1溢出、2 自动换行
				}]
			];

			let ranged = {
				r: vm.editRange[0].row_focus,
				c: vm.editRange[0].column_focus,
			};
			// 转换单元格坐标格式
			let IsWhere = vm.indexToCell([ranged.r, ranged.c]);
			//回写单元格
			luckysheet.setRangeValue(NewData, {
				range: IsWhere + ':' + IsWhere
			});

			var TheIndex = null;

			// 将单元格位置信息与数据进行匹配，替换所在单元格的value值
			// 备注信息，是在子子表上体现的，意味着是第一层级的数据
			// 1、确定选中项是否是备注单元格
			if (ranged.c == vm.RemarkIndex.c) {
				// 获取选中样品的索引
				let ListIndex = ranged.r - vm.RemarkIndex.r - 1;
				// 修改指定索引下的备注字段
				vm.originData.inspections[ListIndex].FRemarks = vm.NumberMapBack($('#autoInput').val());
			} else {
				// 将单元格位置信息与数据进行匹配，替换所在单元格的value值
				vm.originData.inspections.forEach((item, index) => {
					item.FQCItems.forEach(ReItem => {
						// 找到对应的单元格数据
						if (ReItem.r == ranged.r && ReItem.c == ranged.c) {
							TheIndex = index;
							// 赋值
							ReItem.value = vm.NumberMapBack($('#autoInput').val())
							// 如果该单元格数据是有 上下限, 1 => 合格, 2 => 不合格
							if (ReItem.minNum && ReItem.maxNum) {
								let keyValue = +vm.NumberMapBack($('#autoInput').val()) || 0;
								if (+ReItem.maxNum >= keyValue && keyValue >= +ReItem.minNum) {
									ReItem.result = 1
								} else {
									ReItem.result = 2
								}
							} else {

								if (ReItem.value.toLowerCase() === 'ok') {
									ReItem.result = 1
								} else if (ReItem.value.toLowerCase() === 'ng') {
									ReItem.result = 2;
								} else {
									ReItem.result = -1;
								}

							}

							// 当单元格不是双击的时候，赋值完毕就切换下一个
							if (!vm.showEditWindow) {
								// 赋值完毕之后，切换下一个
								vm.setRange(vm.NumberMapBack($('#autoInput').val()))
								// vm.ChoiceCell()
							}
						}
					})
				})
				// 根据当前样品的result是否为true，改变检验结果
				vm.originData.inspections.forEach((item, index) => {
					if (TheIndex == index) {
						let HasNotResult = item.FQCItems.some(ReItem => {
							return ReItem.result == 2
						})
						if (HasNotResult) {
							item.result = 2
						} else {
							item.result = 1
						}
					}
				})

				// 更改行的检验结果
				vm.ChangeRowResult(ranged.r, TheIndex)
			}
			vm.showEditWindow = false;


		},
	}
}()